using System;

namespace wecker.Bauteile {
    public class Restzeit_ermitteln {
        private bool m_ImWeckerModus;
        private DateTime m_weckzeit;
        private DateTime m_aktuelleZeit;

        public Restzeit_ermitteln() {
            m_ImWeckerModus = false;
        }

        public void Weckzeit_setzen(DateTime p_weckzeit) {
            m_weckzeit = p_weckzeit;
            m_ImWeckerModus = true;
            berechne_Restzeit();
        }

        public void Aktuelle_Zeit_setzen(DateTime p_aktuelleZeit) {
            m_aktuelleZeit = p_aktuelleZeit;
            berechne_Restzeit();
        }

        private void berechne_Restzeit() {
            if (m_ImWeckerModus) {
                TimeSpan restzeit = m_weckzeit.Subtract(m_aktuelleZeit);
                if (restzeit.TotalSeconds <= 0) {
                    Alarm_aktivieren();
                    Restzeit_berechnet(new TimeSpan());
                    m_ImWeckerModus = false;
                } else {
                    Restzeit_berechnet(restzeit);
                }
            }
        }

        public event Action Alarm_aktivieren;
        public event Action<TimeSpan> Restzeit_berechnet;
    }
}